const { DataTypes, Model, Deferrable, STRING } = require("sequelize");
const sequelize = require("../../db/sequelize");
const bcrypt = require("bcrypt");
const GoodsSkus = require("../goods/goods_skus");
const Goods = require("../goods/goods");
/**
 * 购物车
 */
class Cart extends Model {
    static async getCartList(page,limit,user_id){
        let json={"list":[],"totalCount":0}
        let row=await this.findAll({
            where:{
                user_id:user_id
            },
            include:[
                {
                    model:GoodsSkus,
                    attributes:["skus","pprice","image"]
                },
                {
                    model:Goods,
                    attributes:["title"]
                }
            ],
            attributes:["id","num"],
            limit:limit,
            offset:limit*page-limit
        })
        row.forEach(value=>{
            json.list.push(value.toJSON())
        })
        json.totalCount=await this.count({
            where:{
                user_id:user_id
            }
        })
        return json
    }
    static async addCart(user_id,goods_id,goods_skus_id,num){
        const [value,bool]=await this.findOrCreate({
            where:{
                user_id:user_id,
                goods_skus_id:goods_skus_id,
                goods_id:goods_id
            },
            defaults:{
                num:num
            }
        })
        if(!bool){
            await (await value.increment({num:num})).save()
        }
    }
    static async delete(user_id,ids){
        return await this.destroy({
            where:{
                user_id:user_id,
                id:ids
            }
        })
    }
    static async updateGoodsSkusId(user_id,id,goods_skus_id){
        return await this.update({
            goods_skus_id:goods_skus_id
        },{
            where:{
                id:id,
                user_id:user_id
            }
        })
    }
    
    static async getCartOne(id,user_id){
        return await this.findOne({
            where:{
                id:id,
                user_id:user_id
            }
        })
    }
};
Cart.init({
    id:{
        type:DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    user_id:{
        type:DataTypes.INTEGER
    },
    goods_id:{
        type:DataTypes.INTEGER
    },
    goods_skus_id:{
        type:DataTypes.INTEGER
    },
    num:{
        type:DataTypes.INTEGER
    }
}, {
    sequelize,//自动注入
    modelName: "Cart",
    tableName: "cart",
    createdAt:"create_time",
    updatedAt:"update_time",
    timestamps:false
})
module.exports = Cart